# 使用官方 Puppeteer 镜像（内含 Node.js + Chromium + 所有系统依赖）
FROM ghcr.io/puppeteer/puppeteer:latest

# 设置工作目录
WORKDIR /app

# 切换为 root 用户以便安装依赖
USER root

# 设置 pnpm 淘宝镜像并安装 pnpm
RUN npm install -g pnpm \
    && pnpm config set registry https://registry.npmmirror.com/ \
    && pnpm config set fetch-retries 5 \
    && pnpm config set fetch-retry-factor 2 \
    && pnpm config set fetch-timeout 60000

# 跳过 Puppeteer 下载 Chromium（镜像已内置）
# ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true



# 复制依赖文件并安装生产依赖（利用缓存）
COPY package.json pnpm-lock.yaml ./
RUN pnpm install --frozen-lockfile --prod --no-optional

# 复制项目源码（并设置权限）
COPY --chown=pptruser:pptruser . .

# 解压压缩包到当前工作目录（/app），并删除原压缩包以减小镜像体积
RUN unzip puppeteer.zip -d /app \
    && chmod -R 755 /app/puppeteer \
    && rm -f puppeteer.zip

# 设置 Puppeteer 国内 Chromium 镜像源
ENV PUPPETEER_DOWNLOAD_HOST=https://registry.npmmirror.com/mirrors
ENV PUPPETEER_SKIP_DOWNLOAD=false

# 安装 Puppeteer 官方 Chrome
# RUN npx puppeteer browsers install chrome

# 可选：声明浏览器路径（保险起见）
# ENV PUPPETEER_EXECUTABLE_PATH=/home/pptruser/.cache/puppeteer/chrome/linux-*/chrome
# ENV PUPPETEER_SKIP_DOWNLOAD=true

# 切回 Puppeteer 默认用户
# USER pptruser

# 暴露端口
EXPOSE 3001

# 启动应用
CMD ["node", "server.js"]
